#!/usr/bin/ksh 

CLIENT=~/plataforma/NemesisRD.pj/test.ss/sdp_client.p
RD_SERVER=~/plataforma/NemesisRD.pj/test.ss/sdp_server.p
SDP_SERVER=~/plataforma/sdp_server.pj/sdp_server.p
SERVER_PORT=11200

# -- solaris   SDP: 4000  NemesisRD: 20000
# -- linux     SDP: 9000  NemesisRD: 50000
# clientLoadList="100 300 400 450 500 900 1000 1250 1500 1900 2000 2100 3000 4000 5000 5500 5700 6000"
OS=`uname`
if [ "$OS" = "SunOS" ]
then
   clientLoadList="50 100 200 350 400 425 500 750 900 1000 1125 1350 1500 1800 1900 2000 2100 2200"
   TIME_OUT=time_solaris.out
else
   clientLoadList="50 100 200 300 400 500 800 850 900 1800 3000 4000 4500 4900 5000 5100 5200 5500"
   TIME_OUT=time_linux.out
fi

shuttle ()
{
   cd $CLIENT > /dev/null
   xst_${HOSTNAME}.go 0 $1 &
   xst_${HOSTNAME}.go 1 $1 &
   xst_${HOSTNAME}.go 2 $1 &
   xst_${HOSTNAME}.go 3 $1 &
   xst_${HOSTNAME}.go 4 $1 &
   xst_${HOSTNAME}.go 5 $1 &
   xst_${HOSTNAME}.go 6 $1 &
   xst_${HOSTNAME}.go 7 $1 &
   xst_${HOSTNAME}.go 8 $1 &
   xst_${HOSTNAME}.go 9 $1 &
   cd - > /dev/null
}

run ()
{
   serverType=$1
   clientLoad=$2
   messageCounter=$3

   testName=`printf "%s/%s_%04dx10_%s.log" $OUTPUT $serverType $clientLoad $messageCounter`
   mkdir -p $testName
   
   > $testName/server.load

   date=`date`
 
   printf "%s" $date 
   printf " | %s ... " $testName
   
   if [ "$serverType" = "rd" ] 
   then
      serverName=$RD_SERVER
   else
      serverName=$SDP_SERVER
   fi

   cd $serverName > /dev/null
   ${serverName}/xst_${HOSTNAME}.go $messageCounter > $testName/server.output
   cd - > /dev/null

   sleep 1
   shuttle $clientLoad > $testName/client.output

   sleep 1
   $MYPATH/measure_load sdp_server $SERVER_PORT >> $testName/server.load 

# Si llega aqui es porque todos los clientes han terminado, asi que verifica el servidor no 
# se haya quedado colgado esperando peticiones que no le llegaran.
#   ps | while read a
#   do
#      process=`echo $a | cut -f 4 -d ' '`
#      if [ "$process" = "sdp_server" ]
#      then
#         pid=`echo $a | cut -f 1 -d ' '`
#         kill -9 $pid
#         break;
#      fi
#   done
  
   if [ -s /export/sdp/OPENCC/trazas/OPENICE_C01_I00.trazas.old ]
   then
      cat /export/sdp/OPENCC/trazas/OPENICE_C01_I00.trazas.old > $testName/server.trace
   else
      > $testName/server.trace
   fi
   cat -s /export/sdp/OPENCC/trazas/OPENICE_C01_I00.trazas >> $testName/server.trace
               
   cat /export/sdp/OPENCC/trazas/OPENMTP_C01_I0* > $testName/client.trace
   cat $serverName/${TIME_OUT} >> $testName/server.output
      
   rm -f /export/sdp/OPENCC/trazas/OPENICE_C01_I00.*  /export/sdp/OPENCC/trazas/OPENMTP_C01_I0*

   echo
} 

MYPATH=`pwd`
OUTPUT=/export/temporal/comparative_rd_vs_sdp/`date -u +%Y%M%d.%H%M%S.output`

mkdir -p $OUTPUT

cd $OUTPUT 
echo "Output: $OUTPUT"

#
# La cantidad de mensajes se calcula como N * 10 * 180. N es el numero de mensajes por segundo que envia cada 
# cliente, 10 es el numero de clientes disponibles y  180 el numero de segundos que queremos que dure cada 
# una de las pruebas.
#
typeset -i nclient=10
typeset -i duration=0
typeset -i n=0
typeset -i clientLoad=0

echo "Load list: " $clientLoadList
echo

for clientLoad in $clientLoadList
do
   if [ $clientLoad -lt 300 ]
   then
      duration=60
   else
      if [ $clientLoad -gt 4000 ]
      then
         duration=360
      else 
         duration=180
      fi
   fi

   n=$nclient*duration*$clientLoad

   run rd $clientLoad $n   

# A partir de 3000 msg/sec el servidor linux-sdp va tan mal que tarda horas en procesar
# las peticinoes en las que deberia tardar 360 seg. Asi que evitamos ejecutarlo y copiaremos 
# los ultimos resultados obtenidos.
# Se crea el directorio para que aparezca en las estadisticas
   if [ $clientLoad -lt 3000 ]
   then
      run sdp $clientLoad $n   
   else
      testName=`printf "%s/sdp_%04dx10_%s.log" $OUTPUT $clientLoad $n`
      mkdir -p $testName
   fi
done

cd $MYPATH


